<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="kDrfw" id="kDrfw"><span data-lake-id="u91f921cb" id="u91f921cb">典型回答</span></h1>
  <p data-lake-id="ua4094468" id="ua4094468"><br></p>
  <p data-lake-id="u41a801f0" id="u41a801f0"><span data-lake-id="udffb7150" id="udffb7150">并发（Concurrent），在操作系统中，是指一个时间段中有几个程序都处于已启动运行到运行完毕之间，且这几个程序都是在同一个处理机上运行。</span></p>
  <p data-lake-id="ub9d2825d" id="ub9d2825d"><br></p>
  <p data-lake-id="u770035da" id="u770035da"><span data-lake-id="u47e6ec1f" id="u47e6ec1f">那么，操作系统是如何实现这种并发的呢？</span></p>
  <p data-lake-id="u815fce04" id="u815fce04"><br></p>
  <p data-lake-id="ud2395cde" id="ud2395cde"><span data-lake-id="u60996e5f" id="u60996e5f">现在我们用到操作系统，无论是Windows、Linux还是MacOS等其实都是</span><strong><span data-lake-id="udd54e41d" id="udd54e41d">多用户多任务分时操作系统</span></strong><span data-lake-id="uabf52c4d" id="uabf52c4d">。使用这些操作系统的用户是可以“同时”干多件事的。</span></p>
  <p data-lake-id="u16898744" id="u16898744"><br></p>
  <p data-lake-id="uc6b8e3bb" id="uc6b8e3bb"><span data-lake-id="u69d3700f" id="u69d3700f">但是实际上，对于单CPU的计算机来说，在CPU中，同一时间是只能干一件事儿的。为了看起来像是“同时干多件事”，分时操作系统是把CPU的时间划分成长短基本相同的时间区间,即”时间片”，通过操作系统的管理，把这些时间片依次轮流地分配给各个用户使用。</span></p>
  <p data-lake-id="ub7713823" id="ub7713823"><br></p>
  <p data-lake-id="ua71b424e" id="ua71b424e"><span data-lake-id="uc24aa961" id="uc24aa961">如果某个作业在时间片结束之前,整个任务还没有完成，那么该作业就被暂停下来,放弃CPU，等待下一轮循环再继续做.此时CPU又分配给另一个作业去使用。</span></p>
  <p data-lake-id="ufef8144b" id="ufef8144b"><br></p>
  <p data-lake-id="u314e8147" id="u314e8147"><span data-lake-id="ub6361b4e" id="ub6361b4e">由于计算机的处理速度很快，只要时间片的间隔取得适当,那么一个用户作业从用完分配给它的一个时间片到获得下一个CPU时间片，中间有所”停顿”，但用户察觉不出来,好像整个系统全由它”独占”似的。</span></p>
  <p data-lake-id="ud598076d" id="ud598076d"><br></p>
  <p data-lake-id="u80b9030d" id="u80b9030d"><span data-lake-id="u3ff0ed30" id="u3ff0ed30">所以，在单CPU的计算机中，我们看起来“同时干多件事”，其实是通过CPU时间片技术，并发完成的。</span></p>
  <p data-lake-id="u417755bb" id="u417755bb"><br></p>
  <p data-lake-id="uf99bb592" id="uf99bb592"><span data-lake-id="u541eb3a2" id="u541eb3a2">提到并发，还有另外一个词容易和他混淆，那就是并行。</span></p>
  <p data-lake-id="u59bf2425" id="u59bf2425"><br></p>
  <h3 data-lake-id="m2c2x" id="m2c2x"><span data-lake-id="u1f128037" id="u1f128037">并发与并行之间的关系</span></h3>
  <p data-lake-id="u259936b8" id="u259936b8"><br></p>
  <p data-lake-id="u98762af3" id="u98762af3"><span data-lake-id="u03cdc578" id="u03cdc578">并行（Parallel），当系统有一个以上CPU时，当一个CPU执行一个进程时，另一个CPU可以执行另一个进程，两个进程互不抢占CPU资源，可以同时进行，这种方式我们称之为并行(Parallel)。</span></p>
  <p data-lake-id="u2dae94d8" id="u2dae94d8"><br></p>
  <p data-lake-id="ud4c2403c" id="ud4c2403c"><span data-lake-id="u96300fa6" id="u96300fa6">Erlang 之父 Joe Armstrong 用一张比较形象的图解释了并发与并行的区别：</span></p>
  <p data-lake-id="u76c8d891" id="u76c8d891"><br></p>
  <p data-lake-id="u21212ce6" id="u21212ce6"><img src="https://cdn.nlark.com/yuque/0/2023/jpeg/5378072/1687693697924-e728f6d6-dcdc-4456-9bd7-f323666b6b4b.jpeg?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_17%2Ctext_SmF2YSA4IEd1IFA%3D%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10"></p>
  <p data-lake-id="ue6900fc5" id="ue6900fc5"><br></p>
  <p data-lake-id="u34187c1f" id="u34187c1f"><span data-lake-id="u98c935d9" id="u98c935d9">并发是两个队伍交替使用一台咖啡机。并行是两个队伍同时使用两台咖啡机。</span></p>
  <p data-lake-id="u493c79c8" id="u493c79c8"><br></p>
  <p data-lake-id="u241324d5" id="u241324d5"><span data-lake-id="ua8f06039" id="ua8f06039">映射到计算机系统中，上图中的咖啡机就是CPU，两个队伍指的就是两个进程。</span></p>
 </body>
</html>